package com.wx.datastructure.tree;

/**
 * @author wx
 * @Description: 树接口
 * @date 2018/12/20 002017:42
 */
public interface IBinaryTtee<E> {
    /**
     * @description: 获取元素数量
     * @author: wx
     * @date: 2018/12/20 0020
     * @param
     * @return: int
     */
    int size();

    /**
     * @description: 容器是否为空
     * @author: wx
     * @date: 2018/12/20 0020
     * @param
     * @return: boolean
     */
    boolean isEmpty();

    /**
     * @description: 新增元素
     * @author: wx
     * @date: 2018/12/20 0020
     * @param e
     * @return: void
     */
    void add(E e);

    /**
     * @description: 是否包含该元素
     * @author: wx
     * @date: 2018/12/20 0020
     * @param e
     * @return: boolean
     */
    boolean contains(E e);

    /**
     * @description: 前序遍历
     * @author: wx
     * @date: 2018/12/20 0020
     * @param
     * @return: void
     */
    void preOrder();

    /**
     * @description: 中序遍历
     * @author: wx
     * @date: 2018/12/20 0020
     * @param
     * @return: void
     */
    void inOrder();

    /**
     * @description: 后序遍历
     * @author: wx
     * @date: 2018/12/20 0020
     * @param
     * @return: void
     */
    void postOrder();

    /**
     * @description: 层序遍历
     * @author: wx
     * @date: 2018/12/20 0020
     * @param
     * @return: void
     */
    void levelOrder();

    /**
     * @description: 寻找二叉树的最小元素
     * @author: wx
     * @date: 2018/12/20 0020
     * @param
     * @return: E
     */
    E minimum();

    /**
     * @description: 寻找二叉树的最大元素
     * @author: wx
     * @date: 2018/12/20 0020
     * @param
     * @return: E
     */
    E maximum();

    /**
     * @description: 从二叉树中删除最小值所在节点, 返回最小值
     * @author: wx
     * @date: 2018/12/20 0020
     * @param
     * @return: E
     */
    E removeMin();

    /**
     * @description: 从二叉树中删除最大值所在节点, 返回最大值
     * @author: wx
     * @date: 2018/12/20 0020
     * @param
     * @return: E
     */
    E removeMax();

    /**
     * @description: 根据元素删除
     * @author: wx
     * @date: 2018/12/20 0020
     * @param e
     * @return: void
     */
    void remove(E e);
}
